package com.lmaye.utils;

import com.lmaye.App;
import lombok.extern.slf4j.Slf4j;
import okhttp3.Response;
import org.apache.commons.lang3.StringUtils;

import java.io.IOException;
import java.util.*;

/**
 * -- 钉钉消息工具类
 *
 * @author lmay.Zhou
 * @date 2019/6/11 16:12 星期二
 * @qq 379839355
 * @email lmay@lmaye.com
 */
@Slf4j
public class DingTalkUtlis {
    /**
     * /**
     * 发送消息给钉钉机器人
     * - 附件内容
     *
     * @param content 内容
     */
    public static void sendMsg(String content) {
        sendMsg(content, null, false);
    }

    /**
     * /**
     * 发送消息给钉钉机器人
     * - 钉钉机器人地址[默认值]
     *
     * @param content 内容
     * @param mobiles 钉钉机器人@的手机号
     * @param isAtAll 是否@所有人
     */
    @SuppressWarnings({"unchecked", "ArraysAsListWithZeroOrOneArgument"})
    public static void sendMsg(String content, List<String> mobiles, boolean isAtAll) {
        // 钉钉机器人地址
        Map<String, String> requestProperties = (Map<String, String>) App.APP_PROPERTIES.get("request");
        String webHook = requestProperties.get("dingTalkWebHook");
        List<String> mobileList = Objects.isNull(mobiles) || mobiles.isEmpty() ?
                Arrays.asList(requestProperties.get("mobile")) : mobiles;
        String text = StringUtils.isBlank(content) ? requestProperties.get("content")
                : requestProperties.get("content") + ": " + content;
        sendMsg(text, mobileList, isAtAll, webHook);
    }

    /**
     * 发送消息给钉钉机器人
     *
     * @param text    内容
     * @param mobiles 钉钉机器人@的手机号
     * @param isAtAll 是否@所有人
     * @param webHook 钉钉机器人地址
     */
    public static void sendMsg(String text, List<String> mobiles, boolean isAtAll, String webHook) {
        try {
            Map<String, Object> textParams = new HashMap<>(1);
            textParams.put("content", text);

            Map<String, Object> atParams = new HashMap<>(2);
            atParams.put("atMobiles", mobiles);
            atParams.put("isAtAll", isAtAll);

            Map<String, Object> params = new HashMap<>(2);
            params.put("msgtype", "text");
            params.put("text", textParams);
            params.put("at", atParams);
            // 请求参数配置
            OKHttpConfig config = OKHttpConfig.builder().url(webHook).headers(null)
                    .method(Method.POST).mediaType(MediaType.JSON).data(GsonUtils.toJson(params)).build();
            // 执行请求
            Response response = OkHttpUtils.execute(config);
            byte[] bytes = response.body().bytes();
            String result = new String(bytes);
            log.info("[发送消息给钉钉机器人] Result: {}", result);
        } catch (IOException e) {
            log.error("DingTalk send message failed, error info: {}", e.getMessage(), e);
        }
    }
}